package org.jetlinks.pro.things;

import org.jetlinks.core.things.ThingRpcSupport;
import reactor.core.publisher.Mono;

import javax.annotation.Nonnull;
import java.util.Map;

public interface ThingsManagerContext {

    /**
     * 使用提供商ID和配置创建一个连接器
     *
     * @param provider      {@link ThingsConnectorProvider#getId()}
     * @param configuration 配置信息.不同到提供商所需到配置不同
     * @return 连接器
     * @see ThingsConnectorProvider
     */
    @Nonnull
    Mono<ThingsConnector> createConnector(@Nonnull String provider,
                                          @Nonnull Map<String, Object> configuration);


    /**
     * 使用提供商ID和配置创建一个RPC支持
     *
     * @param provider      {@link ThingsRpcSupportProvider#getId()}
     * @param configuration 配置信息.不同到提供商所需到配置不同
     * @return 连接器
     * @see ThingsRpcSupportProvider
     */
    @Nonnull
    Mono<ThingRpcSupport> createRpcSupport(@Nonnull String provider,
                                           @Nonnull Map<String, Object> configuration);


    /**
     * 使用提供商ID和配置创建一个转换器
     *
     * @param provider      {@link ThingMessageConverterProvider#getId()}
     * @param configuration 配置信息.不同到提供商所需到配置不同
     * @return 转换器
     * @see ThingMessageConverter
     */
    @Nonnull
    Mono<ThingMessageConverter> createConverter(@Nonnull String provider,
                                                @Nonnull Map<String, Object> configuration);


}
